package metier;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class Departement implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1648333757882637530L;

	private int idDepartement = -1;
	private String libelle;
	private String login;
	private String mdp;
	private Set<Stage> listeStages = new HashSet<Stage>();
	private Set<Etudiant> listeEtudiants = new HashSet<Etudiant>();
	private Set<Entreprise> listeEntreprises = new HashSet<Entreprise>();
	
	private void testerExceptionLibelle(String libelle)
			throws Exception {
		if ((libelle==null) || libelle.equals(""))
			throw new Exception("Libellé ["+libelle+"] incorrect");
	}
	
	private void testerExceptionLogin(String login)
			throws Exception {
		if ((login==null) || login.equals(""))
			throw new Exception("Login ["+login+"] incorrect");
	}
	
	private void testerExceptionMdp(String mdp)
			throws Exception {
		if ((mdp==null) || mdp.equals(""))
			throw new Exception("Mot de passe ["+mdp+"] incorrect");
	}

	public Departement(int idDepartement, String libelle, String login, String mdp) throws Exception {
		
		super();
		
		testerExceptionLibelle(libelle);
		testerExceptionLogin(login);
		testerExceptionMdp(mdp);
		
		this.idDepartement = idDepartement;	
		this.libelle = libelle;
		this.mdp = mdp;
		this.login = login;
		
	}
	
	public Departement(String libelle, String login, String mdp) throws Exception {
			
		testerExceptionLogin(libelle);
		testerExceptionLibelle(libelle);
		testerExceptionLogin(login);
		testerExceptionMdp(mdp);

		this.libelle = libelle;
		this.mdp = mdp;
		this.login = login;
		
	}
	
	public Departement getDepartement()
	{
		return this;
	}
	
	/**
	 * Bien qu'illogique avec le mod�le UML, ce constructeur est obligatoire pour respecter la convention
	 * des JavaBean utilisŽe par certains frameworks (Struts, Hibernate, ...)
	 */
	public Departement()
	{		
		this.libelle = "Neant";
	}

	public int getIdDepartement() {
		return idDepartement;
	}

	public void setIdDepartement(int idDepartement) {
		this.idDepartement = idDepartement;
	}

	public String getLibelle() {
		return libelle;
	}

	public void setLibelle(String libelle) {
		this.libelle = libelle;
	}	

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getMdp() {
		return mdp;
	}

	public void setMdp(String mdp) {
		this.mdp = mdp;
	}

	public Set<Stage> getListeStages() {
		return listeStages;
	}

	public void setListeStages(Set<Stage> listeStages) {
		this.listeStages = listeStages;
	}

	public Set<Etudiant> getListeEtudiants() {
		return listeEtudiants;
	}

	public void setListeEtudiants(Set<Etudiant> listeEtudiants) {
		this.listeEtudiants = listeEtudiants;
	}

	public Set<Entreprise> getListeEntreprises() {
		return listeEntreprises;
	}

	public void setListeEntreprises(Set<Entreprise> listeEntreprises) {
		this.listeEntreprises = listeEntreprises;
	}
	
	public void addStage(Stage stage) {
		this.listeStages.add(stage);
	}
	
	public int nbStages () {
		return this.listeStages.size();
	}
	
	public void addEtudiant(Etudiant etudiant) {
		this.listeEtudiants.add(etudiant);
	}
	
	public int nbEtudiants () {
		return this.listeEtudiants.size();
	}
	
	public void addEntreprise(Entreprise entreprise) {
		this.listeEntreprises.add(entreprise);
	}
	
	public int nbEntreprises () {
		return this.listeEntreprises.size();
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + idDepartement;
		result = prime * result + ((libelle == null) ? 0 : libelle.hashCode());
		result = prime
				* result
				+ ((listeEntreprises == null) ? 0 : listeEntreprises.hashCode());
		result = prime * result
				+ ((listeEtudiants == null) ? 0 : listeEtudiants.hashCode());
		result = prime * result
				+ ((listeStages == null) ? 0 : listeStages.hashCode());
		result = prime * result + ((login == null) ? 0 : login.hashCode());
		result = prime * result + ((mdp == null) ? 0 : mdp.hashCode());
		return result;
	}

	@Override
	public String toString() {
		return "Departement [idDepartement=" + idDepartement + ", libelle="
				+ libelle + ", login=" + login + ", mdp=" + mdp + "]";
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Departement other = (Departement) obj;
		if (idDepartement != other.idDepartement)
			return false;
		if (libelle == null) {
			if (other.libelle != null)
				return false;
		} else if (!libelle.equals(other.libelle))
			return false;
		
		// modification de la fonction equals car appel rŽcursif croisŽ! 
		
		if (login == null) {
			if (other.login != null)
				return false;
		} else if (!login.equals(other.login))
			return false;
		if (mdp == null) {
			if (other.mdp != null)
				return false;
		} else if (!mdp.equals(other.mdp))
			return false;
		return true;
	}
}

